import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes'
import store from '@/store/index'
Vue.use(VueRouter)

//暴露路由模块
const router = new VueRouter({
  routes,
  scrollBehavior(to, from, savedPosition) {
    // 切换路由组件时滚动条始终滚动到顶部
    return { y: 0 }
  },
})
// 使用全局前置守卫
router.beforeEach(async (to, from, next) => {
  let token = localStorage.getItem('TOKEN')
  // 获取 仓库中userInfo的数据
  let name = store.state.user.userInfo.name
  if (token) {
    if (to.path == '/login') {
      next('/')
    } else {
      // 如果userInfo中有数据，则允许跳转路由
      if (name) {
        next()
      } else {
        //在vuex中存储的数据，只有刷新页面后才会没有数据
        //如果uersInfo中没有数据，那么就发送请求获取用户信息
        try {
          await store.dispatch('userInfo')
          next()
        } catch (error) {
          //如果获取用户数据失败，则删除token重新登录
          await store.dispatch('userLogout')
          next('/login')
        }
      }
    }
  } else {
    //未登录的时候哪些页面不可以访问
    //不允许进入，确认订单，支付成功，我的订单页面
    if (to.path.indexOf('/trade') != -1 || to.path.indexOf('/paysuccess') != -1 || to.path.indexOf('/center') != -1) {
      next('/login')
    } else {
      //如果跳转的不是以上页面则允许跳转
      next()
    }
  }
})

export default router
